// 迭代器 Iterator

// 所有能被 for...of 遍历的对象都需要实现 iterable 接口

// const set = new Set(['foo', 'bar', 'baz'])

// const iterator = set[Symbol.iterator]()

// console.log(iterator.next())
// console.log(iterator.next())
// console.log(iterator.next())
// console.log(iterator.next())

// const obj = {
//     // iterable
//     [Symbol.iterator]: function() {
//         // iterator
//         return {
//             next: function() {
//                 // iteration result
//                 return {
//                     value: 'zce',
//                     done: true
//                 }
//             }
//         }
//     }
// }

// for(const item of obj) {
//     console.log('循环体')
// }


const obj = {
    store: ['foo', 'bar', 'baz'],
    // iterable
    [Symbol.iterator]: function() {
        let index = 0
        const self = this
        // iterator
        return {
            next: function() {
                // iteration result
                const result = {
                    value: self.store[index],
                    done: index >= self.store.length
                }
                index++
                return result
            }
        }
    }
}

for(const item of obj) {
    console.log('循环体',item)
}